home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / hack / 1 / src / search.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-07-26  |  3.1 KB  |  134 lines

  1. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  2. /* hack.search.c - version 1.0.3 */
  3.  
  4. #include "hack.h"
  5.  
  6. extern struct monst *makemon();
  7.  
  8. findit()    /* returns number of things found */
  9. {
  10.     int num;
  11.     register xchar zx,zy;
  12.     register struct trap *ttmp;
  13.     register struct monst *mtmp;
  14.     xchar lx,hx,ly,hy;
  15.  
  16.     if(u.uswallow) return(0);
  17.     for(lx = u.ux; (num = levl[lx-1][u.uy].typ) && num != CORR; lx--) ;
  18.     for(hx = u.ux; (num = levl[hx+1][u.uy].typ) && num != CORR; hx++) ;
  19.     for(ly = u.uy; (num = levl[u.ux][ly-1].typ) && num != CORR; ly--) ;
  20.     for(hy = u.uy; (num = levl[u.ux][hy+1].typ) && num != CORR; hy++) ;
  21.     num = 0;
  22.     for(zy = ly; zy <= hy; zy++)
  23.         for(zx = lx; zx <= hx; zx++) {
  24.             if(levl[zx][zy].typ == SDOOR) {
  25.                 levl[zx][zy].typ = DOOR;
  26.                 atl(zx, zy, '+');
  27.                 num++;
  28.             } else if(levl[zx][zy].typ == SCORR) {
  29.                 levl[zx][zy].typ = CORR;
  30.                 atl(zx, zy, CORR_SYM);
  31.                 num++;
  32.             } else if(ttmp = t_at(zx, zy)) {
  33.                 if(ttmp->ttyp == PIERC){
  34.                     (void) makemon(PM_PIERCER, zx, zy);
  35.                     num++;
  36.                     deltrap(ttmp);
  37.                 } else if(!ttmp->tseen) {
  38.                     ttmp->tseen = 1;
  39.                     if(!vism_at(zx, zy))
  40.                         atl(zx,zy,'^');
  41.                     num++;
  42.                 }
  43.             } else if(mtmp = m_at(zx,zy)) if(mtmp->mimic){
  44.                 seemimic(mtmp);
  45.                 num++;
  46.             }
  47.         }
  48.     return(num);
  49. }
  50.  
  51. dosearch()
  52. {
  53.     register xchar x,y;
  54.     register struct trap *trap;
  55.     register struct monst *mtmp;
  56.  
  57.     if(u.uswallow)
  58.         pline("What are you looking for? The exit?");
  59.     else
  60.     for(x = u.ux-1; x < u.ux+2; x++)
  61.     for(y = u.uy-1; y < u.uy+2; y++) if(x != u.ux || y != u.uy) {
  62.         if(levl[x][y].typ == SDOOR) {
  63.             if(rn2(7)) continue;
  64.             levl[x][y].typ = DOOR;
  65.             levl[x][y].seen = 0;    /* force prl */
  66.             prl(x,y);
  67.             nomul(0);
  68.         } else if(levl[x][y].typ == SCORR) {
  69.             if(rn2(7)) continue;
  70.             levl[x][y].typ = CORR;
  71.             levl[x][y].seen = 0;    /* force prl */
  72.             prl(x,y);
  73.             nomul(0);
  74.         } else {
  75.         /* Be careful not to find anything in an SCORR or SDOOR */
  76.             if(mtmp = m_at(x,y)) if(mtmp->mimic){
  77.                 seemimic(mtmp);
  78.                 pline("You find a mimic.");
  79.                 return(1);
  80.             }
  81.             for(trap = ftrap; trap; trap = trap->ntrap)
  82.             if(trap->tx == x && trap->ty == y &&
  83.                !trap->tseen && !rn2(8)) {
  84.                 nomul(0);
  85.                 pline("You find a%s.", traps[trap->ttyp]);
  86.                 if(trap->ttyp == PIERC) {
  87.                     deltrap(trap);
  88.                     (void) makemon(PM_PIERCER,x,y);
  89.                     return(1);
  90.                 }
  91.                 trap->tseen = 1;
  92.                 if(!vism_at(x,y)) atl(x,y,'^');
  93.             }
  94.         }
  95.     }
  96.     return(1);
  97. }
  98.  
  99. doidtrap() {
  100. register struct trap *trap;
  101. register int x,y;
  102.     if(!getdir(1)) return(0);
  103.     x = u.ux + u.dx;
  104.     y = u.uy + u.dy;
  105.     for(trap = ftrap; trap; trap = trap->ntrap)
  106.         if(trap->tx == x && trap->ty == y && trap->tseen) {
  107.             if(u.dz)
  108.             if((u.dz < 0) != (!xdnstair && trap->ttyp == TRAPDOOR))
  109.                 continue;
  110.             pline("That is a%s.", traps[trap->ttyp]);
  111.             return(0);
  112.         }
  113.     pline("I can't see a trap there.");
  114.     return(0);
  115. }
  116.  
  117. wakeup(mtmp)
  118. register struct monst *mtmp;
  119. {
  120.     mtmp->msleep = 0;
  121.     setmangry(mtmp);
  122.     if(mtmp->mimic) seemimic(mtmp);
  123. }
  124.  
  125. /* NOTE: we must check if(mtmp->mimic) before calling this routine */
  126. seemimic(mtmp)
  127. register struct monst *mtmp;
  128. {
  129.         mtmp->mimic = 0;
  130.         mtmp->mappearance = 0;
  131.         unpmon(mtmp);
  132.         pmon(mtmp);
  133. }
  134.